In config/mips/linux.h, the macro ASM_DECLARE_FUNCTION_SIZE() doesn't actually emit the .size directive. Testcase follows. % cat tst.c int func1(void) { return(1); } % mips-linux-gcc -c tst.c % mips-linux-readelf -s tst.o Symbol table '.symtab' contains 11 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 FILE LOCAL DEFAULT ABS tst.c 2: 00000000 0 SECTION LOCAL DEFAULT 1 3: 00000000 0 SECTION LOCAL DEFAULT 3 4: 00000000 0 SECTION LOCAL DEFAULT 4 5: 00000000 0 SECTION LOCAL DEFAULT 8 6: 00000000 0 SECTION LOCAL DEFAULT 5 7: 00000000 0 SECTION LOCAL DEFAULT 6 8: 00000000 0 SECTION LOCAL DEFAULT 9 9: 00000000 0 FUNC GLOBAL DEFAULT 1 func1 10: 00000000 0 OBJECT GLOBAL DEFAULT UND _gp_disp Will attach a patch after bug is opened.
Created attachment 7927 [details] patch to emit .size directive for mips-linux
Forgot to note. I found it in 3.3.4 but it looks like it's still a problem in mainline.
Created attachment 7942 [details] testing diff for size problem here's a testing patch for it. as we spoke this is a problem in binutils, not gcc. the patch also adds unwind info if it doesn't exist.
Created attachment 8129 [details] new patch Here's another patch that I'm testing. I was doing this in a weird place before. It implements the size directive and adds the .eh_frame section if not there. If you've still got the large binary problems let me know and I'll give you a patch for just the size directives. On the bright side readelf -s does give what appear to be accurate sizes for the functions now.
fixed quite a while ago.
Reopening to ...
Fixed (I thought we have a state called MOVED).