1*7304104dSAndroid Build Coastguard Worker#! /bin/sh 2*7304104dSAndroid Build Coastguard Worker# Copyright (C) 2011-2013 Red Hat, Inc. 3*7304104dSAndroid Build Coastguard Worker# This file is part of elfutils. 4*7304104dSAndroid Build Coastguard Worker# 5*7304104dSAndroid Build Coastguard Worker# This file is free software; you can redistribute it and/or modify 6*7304104dSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 7*7304104dSAndroid Build Coastguard Worker# the Free Software Foundation; either version 3 of the License, or 8*7304104dSAndroid Build Coastguard Worker# (at your option) any later version. 9*7304104dSAndroid Build Coastguard Worker# 10*7304104dSAndroid Build Coastguard Worker# elfutils is distributed in the hope that it will be useful, but 11*7304104dSAndroid Build Coastguard Worker# WITHOUT ANY WARRANTY; without even the implied warranty of 12*7304104dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*7304104dSAndroid Build Coastguard Worker# GNU General Public License for more details. 14*7304104dSAndroid Build Coastguard Worker# 15*7304104dSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License 16*7304104dSAndroid Build Coastguard Worker# along with this program. If not, see <http://www.gnu.org/licenses/>. 17*7304104dSAndroid Build Coastguard Worker 18*7304104dSAndroid Build Coastguard Worker. $srcdir/test-subr.sh 19*7304104dSAndroid Build Coastguard Worker 20*7304104dSAndroid Build Coastguard Worker 21*7304104dSAndroid Build Coastguard Worker# testfile52.c: 22*7304104dSAndroid Build Coastguard Worker# #include <stdlib.h> 23*7304104dSAndroid Build Coastguard Worker# int foo() { exit(0); } 24*7304104dSAndroid Build Coastguard Worker# 25*7304104dSAndroid Build Coastguard Worker# gcc -m32 -g -shared testfile52-32.c -o testfile52-32.so 26*7304104dSAndroid Build Coastguard Worker# eu-strip -f testfile52-32.so.debug testfile52-32.so 27*7304104dSAndroid Build Coastguard Worker# cp testfile52-32.so testfile52-32.prelink.so 28*7304104dSAndroid Build Coastguard Worker# prelink -N testfile52-32.prelink.so 29*7304104dSAndroid Build Coastguard Worker# cp testfile52-32.so testfile52-32.noshdrs.so 30*7304104dSAndroid Build Coastguard Worker# prelink -r 0x42000000 testfile52-32.noshdrs.so 31*7304104dSAndroid Build Coastguard Worker# eu-strip --remove-comment --strip-sections testfile52-32.noshdrs.so 32*7304104dSAndroid Build Coastguard Worker 33*7304104dSAndroid Build Coastguard Workertestfiles testfile52-32.so testfile52-32.so.debug 34*7304104dSAndroid Build Coastguard Workertestfiles testfile52-32.prelink.so testfile52-32.noshdrs.so 35*7304104dSAndroid Build Coastguard Workertempfiles testmaps52-32 testfile52-32.noshdrs.so.debug 36*7304104dSAndroid Build Coastguard Workerln -snf testfile52-32.so.debug testfile52-32.noshdrs.so.debug 37*7304104dSAndroid Build Coastguard Worker 38*7304104dSAndroid Build Coastguard Workercat > testmaps52-32 <<EOF 39*7304104dSAndroid Build Coastguard Worker00111000-00112000 r-xp 00000000 fd:01 1 `pwd`/testfile52-32.so 40*7304104dSAndroid Build Coastguard Worker00112000-00113000 rw-p 00000000 fd:01 1 `pwd`/testfile52-32.so 41*7304104dSAndroid Build Coastguard Worker41000000-41001000 r-xp 00000000 fd:01 2 `pwd`/testfile52-32.prelink.so 42*7304104dSAndroid Build Coastguard Worker41001000-41002000 rw-p 00000000 fd:01 2 `pwd`/testfile52-32.prelink.so 43*7304104dSAndroid Build Coastguard Worker42000000-42001000 r-xp 00000000 fd:01 3 `pwd`/testfile52-32.noshdrs.so 44*7304104dSAndroid Build Coastguard Worker42001000-42002000 rw-p 00000000 fd:01 3 `pwd`/testfile52-32.noshdrs.so 45*7304104dSAndroid Build Coastguard WorkerEOF 46*7304104dSAndroid Build Coastguard Worker 47*7304104dSAndroid Build Coastguard Worker# Prior to commit 1743d7f, libdwfl would fail on the second address, 48*7304104dSAndroid Build Coastguard Worker# because it didn't notice that prelink added a 0x20-byte offset from 49*7304104dSAndroid Build Coastguard Worker# what the .debug file reports. 50*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps52-32 \ 51*7304104dSAndroid Build Coastguard Worker 0x11140c 0x4100042d 0x4200040e <<\EOF 52*7304104dSAndroid Build Coastguard Workerfoo 53*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile52-32.c:2 54*7304104dSAndroid Build Coastguard Workerfoo+0x1 55*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile52-32.c:2 56*7304104dSAndroid Build Coastguard Workerfoo+0x2 57*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile52-32.c:2 58*7304104dSAndroid Build Coastguard WorkerEOF 59*7304104dSAndroid Build Coastguard Worker 60*7304104dSAndroid Build Coastguard Worker# Repeat testfile52 for -m64. The particular REL>RELA issue doesn't exist, but 61*7304104dSAndroid Build Coastguard Worker# we'll make sure the rest works anyway. 62*7304104dSAndroid Build Coastguard Workertestfiles testfile52-64.so testfile52-64.so.debug 63*7304104dSAndroid Build Coastguard Workertestfiles testfile52-64.prelink.so testfile52-64.noshdrs.so 64*7304104dSAndroid Build Coastguard Workertempfiles testmaps52-64 testfile52-64.noshdrs.so.debug 65*7304104dSAndroid Build Coastguard Workerln -snf testfile52-64.so.debug testfile52-64.noshdrs.so.debug 66*7304104dSAndroid Build Coastguard Worker 67*7304104dSAndroid Build Coastguard Workercat > testmaps52-64 <<EOF 68*7304104dSAndroid Build Coastguard Worker1000000000-1000001000 r-xp 00000000 fd:11 1 `pwd`/testfile52-64.so 69*7304104dSAndroid Build Coastguard Worker1000001000-1000200000 ---p 00001000 fd:11 1 `pwd`/testfile52-64.so 70*7304104dSAndroid Build Coastguard Worker1000200000-1000201000 rw-p 00000000 fd:11 1 `pwd`/testfile52-64.so 71*7304104dSAndroid Build Coastguard Worker3000000000-3000001000 r-xp 00000000 fd:11 2 `pwd`/testfile52-64.prelink.so 72*7304104dSAndroid Build Coastguard Worker3000001000-3000200000 ---p 00001000 fd:11 2 `pwd`/testfile52-64.prelink.so 73*7304104dSAndroid Build Coastguard Worker3000200000-3000201000 rw-p 00000000 fd:11 2 `pwd`/testfile52-64.prelink.so 74*7304104dSAndroid Build Coastguard Worker3800000000-3800001000 r-xp 00000000 fd:11 3 `pwd`/testfile52-64.noshdrs.so 75*7304104dSAndroid Build Coastguard Worker3800001000-3800200000 ---p 00001000 fd:11 3 `pwd`/testfile52-64.noshdrs.so 76*7304104dSAndroid Build Coastguard Worker3800200000-3800201000 rw-p 00000000 fd:11 3 `pwd`/testfile52-64.noshdrs.so 77*7304104dSAndroid Build Coastguard WorkerEOF 78*7304104dSAndroid Build Coastguard Worker 79*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps52-64 \ 80*7304104dSAndroid Build Coastguard Worker 0x100000056c 0x300000056d 0x380000056e <<\EOF 81*7304104dSAndroid Build Coastguard Workerfoo 82*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile52-64.c:2 83*7304104dSAndroid Build Coastguard Workerfoo+0x1 84*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile52-64.c:2 85*7304104dSAndroid Build Coastguard Workerfoo+0x2 86*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile52-64.c:2 87*7304104dSAndroid Build Coastguard WorkerEOF 88*7304104dSAndroid Build Coastguard Worker 89*7304104dSAndroid Build Coastguard Worker 90*7304104dSAndroid Build Coastguard Worker# testfile53.c: 91*7304104dSAndroid Build Coastguard Worker# char foo[0x1000]; 92*7304104dSAndroid Build Coastguard Worker# int main() { return 0; } 93*7304104dSAndroid Build Coastguard Worker# 94*7304104dSAndroid Build Coastguard Worker# gcc -m32 -g testfile53-32.c -o testfile53-32 95*7304104dSAndroid Build Coastguard Worker# eu-strip -f testfile53-32.debug testfile53-32 96*7304104dSAndroid Build Coastguard Worker# cp testfile53-32 testfile53-32.prelink 97*7304104dSAndroid Build Coastguard Worker# prelink -N testfile53-32.prelink 98*7304104dSAndroid Build Coastguard Workertestfiles testfile53-32 testfile53-32.debug testfile53-32.prelink 99*7304104dSAndroid Build Coastguard Worker 100*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-32 0x8048394 0x8048395 <<\EOF 101*7304104dSAndroid Build Coastguard Workermain 102*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-32.c:2 103*7304104dSAndroid Build Coastguard Workermain+0x1 104*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-32.c:2 105*7304104dSAndroid Build Coastguard WorkerEOF 106*7304104dSAndroid Build Coastguard Worker 107*7304104dSAndroid Build Coastguard Worker# prelink shuffled some of the sections, but .text is in the same place. 108*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-32.prelink 0x8048396 0x8048397 <<\EOF 109*7304104dSAndroid Build Coastguard Workermain+0x2 110*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-32.c:2 111*7304104dSAndroid Build Coastguard Workermain+0x3 112*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-32.c:2 113*7304104dSAndroid Build Coastguard WorkerEOF 114*7304104dSAndroid Build Coastguard Worker 115*7304104dSAndroid Build Coastguard Worker# Repeat testfile53 in 64-bit, except use foo[0x800] to achieve the same 116*7304104dSAndroid Build Coastguard Worker# prelink section shuffling. 117*7304104dSAndroid Build Coastguard Workertestfiles testfile53-64 testfile53-64.debug testfile53-64.prelink 118*7304104dSAndroid Build Coastguard Worker 119*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-64 0x400474 0x400475 <<\EOF 120*7304104dSAndroid Build Coastguard Workermain 121*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-64.c:2 122*7304104dSAndroid Build Coastguard Workermain+0x1 123*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-64.c:2 124*7304104dSAndroid Build Coastguard WorkerEOF 125*7304104dSAndroid Build Coastguard Worker 126*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-64.prelink 0x400476 0x400477 <<\EOF 127*7304104dSAndroid Build Coastguard Workermain+0x2 128*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-64.c:2 129*7304104dSAndroid Build Coastguard Workermain+0x3 130*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile53-64.c:2 131*7304104dSAndroid Build Coastguard WorkerEOF 132*7304104dSAndroid Build Coastguard Worker 133*7304104dSAndroid Build Coastguard Worker 134*7304104dSAndroid Build Coastguard Worker# testfile54.c: 135*7304104dSAndroid Build Coastguard Worker# extern void * stdin; 136*7304104dSAndroid Build Coastguard Worker# static void * pstdin = &stdin; 137*7304104dSAndroid Build Coastguard Worker# void * const foo = &pstdin; 138*7304104dSAndroid Build Coastguard Worker# 139*7304104dSAndroid Build Coastguard Worker# gcc -m32 -g -shared -nostartfiles testfile54-32.c -o testfile54-32.so 140*7304104dSAndroid Build Coastguard Worker# eu-strip -f testfile54-32.so.debug testfile54-32.so 141*7304104dSAndroid Build Coastguard Worker# cp testfile54-32.so testfile54-32.prelink.so 142*7304104dSAndroid Build Coastguard Worker# prelink -N testfile54-32.prelink.so 143*7304104dSAndroid Build Coastguard Worker# cp testfile54-32.so testfile54-32.noshdrs.so 144*7304104dSAndroid Build Coastguard Worker# prelink -r 0x42000000 testfile54-32.noshdrs.so 145*7304104dSAndroid Build Coastguard Worker# eu-strip --remove-comment --strip-sections testfile54-32.noshdrs.so 146*7304104dSAndroid Build Coastguard Workertestfiles testfile54-32.so testfile54-32.so.debug 147*7304104dSAndroid Build Coastguard Workertestfiles testfile54-32.prelink.so testfile54-32.noshdrs.so 148*7304104dSAndroid Build Coastguard Workertempfiles testmaps54-32 149*7304104dSAndroid Build Coastguard Worker 150*7304104dSAndroid Build Coastguard Worker# Note we have no testfile54-32.noshdrs.so.debug link here, so 151*7304104dSAndroid Build Coastguard Worker# this is testing finding the symbols in .dynsym via PT_DYNAMIC. 152*7304104dSAndroid Build Coastguard Worker 153*7304104dSAndroid Build Coastguard Workercat > testmaps54-32 <<EOF 154*7304104dSAndroid Build Coastguard Worker00111000-00112000 r--p 00000000 fd:01 1 `pwd`/testfile54-32.so 155*7304104dSAndroid Build Coastguard Worker00112000-00113000 rw-p 00000000 fd:01 1 `pwd`/testfile54-32.so 156*7304104dSAndroid Build Coastguard Worker41000000-41001000 r--p 00000000 fd:01 2 `pwd`/testfile54-32.prelink.so 157*7304104dSAndroid Build Coastguard Worker41001000-41002000 rw-p 00000000 fd:01 2 `pwd`/testfile54-32.prelink.so 158*7304104dSAndroid Build Coastguard Worker42000000-42001000 r--p 00000000 fd:01 3 `pwd`/testfile54-32.noshdrs.so 159*7304104dSAndroid Build Coastguard Worker42001000-42002000 rw-p 00000000 fd:01 3 `pwd`/testfile54-32.noshdrs.so 160*7304104dSAndroid Build Coastguard WorkerEOF 161*7304104dSAndroid Build Coastguard Worker 162*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps54-32 \ 163*7304104dSAndroid Build Coastguard Worker 0x1111fc 0x1122a4 0x410001fd 0x410012a5 0x420001fe <<\EOF 164*7304104dSAndroid Build Coastguard Workerfoo 165*7304104dSAndroid Build Coastguard Worker??:0 166*7304104dSAndroid Build Coastguard Workerpstdin 167*7304104dSAndroid Build Coastguard Worker??:0 168*7304104dSAndroid Build Coastguard Workerfoo+0x1 169*7304104dSAndroid Build Coastguard Worker??:0 170*7304104dSAndroid Build Coastguard Workerpstdin+0x1 171*7304104dSAndroid Build Coastguard Worker??:0 172*7304104dSAndroid Build Coastguard Workerfoo+0x2 173*7304104dSAndroid Build Coastguard Worker??:0 174*7304104dSAndroid Build Coastguard WorkerEOF 175*7304104dSAndroid Build Coastguard Worker 176*7304104dSAndroid Build Coastguard Worker# Repeat testfile64 in 64-bit 177*7304104dSAndroid Build Coastguard Workertestfiles testfile54-64.so testfile54-64.so.debug 178*7304104dSAndroid Build Coastguard Workertestfiles testfile54-64.prelink.so testfile54-64.noshdrs.so 179*7304104dSAndroid Build Coastguard Workertempfiles testmaps54-64 180*7304104dSAndroid Build Coastguard Worker 181*7304104dSAndroid Build Coastguard Worker# Note we have no testfile54-64.noshdrs.so.debug link here, so 182*7304104dSAndroid Build Coastguard Worker# this is testing finding the symbols in .dynsym via PT_DYNAMIC. 183*7304104dSAndroid Build Coastguard Worker 184*7304104dSAndroid Build Coastguard Workercat > testmaps54-64 <<EOF 185*7304104dSAndroid Build Coastguard Worker1000000000-1000001000 r--p 00000000 fd:11 1 `pwd`/testfile54-64.so 186*7304104dSAndroid Build Coastguard Worker1000001000-1000200000 ---p 00001000 fd:11 1 `pwd`/testfile54-64.so 187*7304104dSAndroid Build Coastguard Worker1000200000-1000201000 rw-p 00000000 fd:11 1 `pwd`/testfile54-64.so 188*7304104dSAndroid Build Coastguard Worker3000000000-3000001000 r--p 00000000 fd:11 2 `pwd`/testfile54-64.prelink.so 189*7304104dSAndroid Build Coastguard Worker3000001000-3000200000 ---p 00001000 fd:11 2 `pwd`/testfile54-64.prelink.so 190*7304104dSAndroid Build Coastguard Worker3000200000-3000201000 rw-p 00000000 fd:11 2 `pwd`/testfile54-64.prelink.so 191*7304104dSAndroid Build Coastguard Worker3800000000-3800001000 r--p 00000000 fd:11 3 `pwd`/testfile54-64.noshdrs.so 192*7304104dSAndroid Build Coastguard Worker3800001000-3800200000 ---p 00001000 fd:11 3 `pwd`/testfile54-64.noshdrs.so 193*7304104dSAndroid Build Coastguard Worker3800200000-3800201000 rw-p 00000000 fd:11 3 `pwd`/testfile54-64.noshdrs.so 194*7304104dSAndroid Build Coastguard WorkerEOF 195*7304104dSAndroid Build Coastguard Worker 196*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps54-64 \ 197*7304104dSAndroid Build Coastguard Worker 0x10000002f8 0x1000200448 0x30000002f9 0x3000200449 0x38000002fa <<\EOF 198*7304104dSAndroid Build Coastguard Workerfoo 199*7304104dSAndroid Build Coastguard Worker??:0 200*7304104dSAndroid Build Coastguard Workerpstdin 201*7304104dSAndroid Build Coastguard Worker??:0 202*7304104dSAndroid Build Coastguard Workerfoo+0x1 203*7304104dSAndroid Build Coastguard Worker??:0 204*7304104dSAndroid Build Coastguard Workerpstdin+0x1 205*7304104dSAndroid Build Coastguard Worker??:0 206*7304104dSAndroid Build Coastguard Workerfoo+0x2 207*7304104dSAndroid Build Coastguard Worker??:0 208*7304104dSAndroid Build Coastguard WorkerEOF 209*7304104dSAndroid Build Coastguard Worker 210*7304104dSAndroid Build Coastguard Worker 211*7304104dSAndroid Build Coastguard Worker# testfile55.c: 212*7304104dSAndroid Build Coastguard Worker# extern void *stdin; 213*7304104dSAndroid Build Coastguard Worker# int main() { return !stdin; } 214*7304104dSAndroid Build Coastguard Worker# 215*7304104dSAndroid Build Coastguard Worker# gcc -m32 -g testfile55-32.c -o testfile55-32 216*7304104dSAndroid Build Coastguard Worker# eu-strip -f testfile55-32.debug testfile55-32 217*7304104dSAndroid Build Coastguard Worker# cp testfile55-32 testfile55-32.prelink 218*7304104dSAndroid Build Coastguard Worker# prelink -N testfile55-32.prelink 219*7304104dSAndroid Build Coastguard Workertestfiles testfile55-32 testfile55-32.debug testfile55-32.prelink 220*7304104dSAndroid Build Coastguard Worker 221*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-32 0x80483b4 0x80483b5 <<\EOF 222*7304104dSAndroid Build Coastguard Workermain 223*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-32.c:2 224*7304104dSAndroid Build Coastguard Workermain+0x1 225*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-32.c:2 226*7304104dSAndroid Build Coastguard WorkerEOF 227*7304104dSAndroid Build Coastguard Worker 228*7304104dSAndroid Build Coastguard Worker# prelink splits .bss into .dynbss+.bss, so the start of .bss changes, but the 229*7304104dSAndroid Build Coastguard Worker# total size remains the same, and .text doesn't move at all. 230*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-32.prelink 0x80483b6 0x80483b7 <<\EOF 231*7304104dSAndroid Build Coastguard Workermain+0x2 232*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-32.c:2 233*7304104dSAndroid Build Coastguard Workermain+0x3 234*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-32.c:2 235*7304104dSAndroid Build Coastguard WorkerEOF 236*7304104dSAndroid Build Coastguard Worker 237*7304104dSAndroid Build Coastguard Worker# Repeat testfile55 in 64-bit 238*7304104dSAndroid Build Coastguard Workertestfiles testfile55-64 testfile55-64.debug testfile55-64.prelink 239*7304104dSAndroid Build Coastguard Worker 240*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-64 0x4004b4 0x4004b5 <<\EOF 241*7304104dSAndroid Build Coastguard Workermain 242*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-64.c:2 243*7304104dSAndroid Build Coastguard Workermain+0x1 244*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-64.c:2 245*7304104dSAndroid Build Coastguard WorkerEOF 246*7304104dSAndroid Build Coastguard Worker 247*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-64.prelink 0x4004b6 0x4004b7 <<\EOF 248*7304104dSAndroid Build Coastguard Workermain+0x2 249*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-64.c:2 250*7304104dSAndroid Build Coastguard Workermain+0x3 251*7304104dSAndroid Build Coastguard Worker/home/jistone/src/elfutils/tests/testfile55-64.c:2 252*7304104dSAndroid Build Coastguard WorkerEOF 253