This makes the references to getcwd() in getwd() and realpath() skip the 
PLT.  __getcwd() is already hidden by the link-time symbol list, but the 
wrapping here lets the compiler generate a shorter code sequence on some 
archs (I'm looking at you, i386).

check_sym report:
Dynamic export changes:
weakened:
        getcwd

PLT removed:
        getcwd

ok?

Philip Guenther


Index: gen/getcwd.c
===================================================================
RCS file: /cvs/src/lib/libc/gen/getcwd.c,v
retrieving revision 1.19
diff -u -p -r1.19 getcwd.c
--- gen/getcwd.c        30 Sep 2013 12:02:33 -0000      1.19
+++ gen/getcwd.c        5 Apr 2016 06:36:08 -0000
@@ -22,6 +22,7 @@
 #include <unistd.h>
 
 int __getcwd(char *buf, size_t len);
+PROTO_NORMAL(__getcwd);
 
 char *
 getcwd(char *buf, size_t size)
@@ -44,3 +45,4 @@ getcwd(char *buf, size_t size)
 
        return (buf);
 }
+DEF_WEAK(getcwd);
Index: hidden/unistd.h
===================================================================
RCS file: /cvs/src/lib/libc/hidden/unistd.h,v
retrieving revision 1.7
diff -u -p -r1.7 unistd.h
--- hidden/unistd.h     30 Mar 2016 07:52:47 -0000      1.7
+++ hidden/unistd.h     5 Apr 2016 06:36:08 -0000
@@ -61,7 +61,7 @@ PROTO_DEPRECATED(fflagstostr);
 PROTO_NORMAL(fpathconf);
 /*PROTO_CANCEL(fsync);*/
 PROTO_NORMAL(ftruncate);
-/*PROTO_BARE(getcwd);*/
+PROTO_NORMAL(getcwd);
 PROTO_NORMAL(getdomainname);
 PROTO_NORMAL(getdtablecount);
 PROTO_DEPRECATED(getdtablesize);

Reply via email to