Date: Thu, 17 Jan 2002 21:46:41 +0000 From: Mark Murray <mark@grondar.za> To: audit@freebsd.org Subject: lib/csu cleanup Message-ID: <200201172146.g0HLkft13995@grimreaper.grondar.org>
next in thread | raw e-mail | index | archive | help
Hi
I've been running these patches for quite a while (the i386-elf ones
anyway) without problems. They result is a diff reduction between
i386-elf and alpha, and a mostlly clean report from the lint that
I'm using. Also, it is mostly WARNS=4 clean (there is a whine about
no prototype for _start()).
There is a small bit of style cleanup.
Questions:
1) I've wrapped some _horrible_ assembler in #ifndef lint/#endif.
What is a better way (if any)? #ifndef __STDC__ does not cut it
as GCC's preprocessor defines that for lint. I have a half-baked
idea for COMPILING and LINTING macros, but I'm sure there is
a better way. Mebbe its just using 'lint'?
2) Where can _start() be prototyped? Where is is used?
3) Could those with reviewing skills please have a look at this?
M
Index: alpha/crt1.c
===================================================================
RCS file: /home/ncvs/src/lib/csu/alpha/crt1.c,v
retrieving revision 1.10
diff -u -d -r1.10 crt1.c
--- alpha/crt1.c 26 Oct 2001 06:45:10 -0000 1.10
+++ alpha/crt1.c 17 Jan 2002 21:11:52 -0000
@@ -60,7 +60,7 @@
#endif
char **environ;
-char *__progname = "";
+const char *__progname = "";
/* The entry function. */
void
@@ -72,13 +72,20 @@
int argc;
char **argv;
char **env;
+ const char *s;
+ union {
+ char **a;
+ long *b;
+ } xlat; /* Looks horrible, but is a convincing way
+ * to translate different pointer types
+ */
- argc = * (long *) ap;
+ argv = xlat.a = ap;
+ argc = *xlat.b;
argv = ap + 1;
env = ap + 2 + argc;
environ = env;
if(argc > 0 && argv[0] != NULL) {
- char *s;
__progname = argv[0];
for (s = __progname; *s != '\0'; s++)
if (*s == '/')
@@ -108,7 +115,5 @@
/*
* NOTE: Leave the RCS ID _after_ __start(), in case it gets placed in .text.
*/
-#ifndef lint
-static const char rcsid[] =
- "$FreeBSD: src/lib/csu/alpha/crt1.c,v 1.10 2001/10/26 06:45:10 obrien Exp $";
-#endif
+
+__FBSDID("$FreeBSD: src/lib/csu/alpha/crt1.c,v 1.10 2001/10/26 06:45:10 obrien Exp $");
Index: i386-elf/crt1.c
===================================================================
RCS file: /home/ncvs/src/lib/csu/i386-elf/crt1.c,v
retrieving revision 1.5
diff -u -d -r1.5 crt1.c
--- i386-elf/crt1.c 28 Oct 2000 21:26:48 -0000 1.5
+++ i386-elf/crt1.c 17 Jan 2002 21:18:03 -0000
@@ -21,14 +21,13 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD: src/lib/csu/i386-elf/crt1.c,v 1.5 2000/10/28 21:26:48 obrien Exp $
*/
#ifndef __GNUC__
#error "GCC is needed to compile this file"
#endif
+#include <sys/cdefs.h>
#include <stddef.h>
#include <stdlib.h>
#include "crtbrand.c"
@@ -50,16 +49,20 @@
#pragma weak _DYNAMIC
#ifdef __i386__
+#ifndef lint
#define get_rtld_cleanup() \
({ fptr __value; \
__asm__("movl %%edx,%0" : "=rm"(__value)); \
__value; })
#else
+#define get_rtld_cleanup() 0
+#endif
+#else
#error "This file only supports the i386 architecture"
#endif
char **environ;
-char *__progname = "";
+const char *__progname = "";
void
_start(char *arguments, ...)
@@ -68,21 +71,27 @@
int argc;
char **argv;
char **env;
+ const char *s;
+ union {
+ char **a;
+ int *b;
+ } xlat; /* Looks horrible, but is a convincing way
+ * to translate different pointer types
+ */
rtld_cleanup = get_rtld_cleanup();
- argv = &arguments;
- argc = * (int *) (argv - 1);
+ xlat.a = argv = &arguments;
+ argc = *(xlat.b - 1);
env = argv + argc + 1;
environ = env;
- if(argc > 0 && argv[0] != NULL) {
- char *s;
+ if (argc > 0 && argv[0] != NULL) {
__progname = argv[0];
for (s = __progname; *s != '\0'; s++)
if (*s == '/')
__progname = s + 1;
}
- if(&_DYNAMIC != NULL)
+ if (&_DYNAMIC != NULL)
atexit(rtld_cleanup);
#ifdef GCRT
@@ -101,3 +110,9 @@
__asm__("eprol:");
__asm__(".previous");
#endif
+
+/*
+ * NOTE: Leave the RCS ID _after_ __start(), in case it gets placed in .text.
+ */
+
+__FBSDID("$FreeBSD: src/lib/csu/i386-elf/crt1.c,v 1.5 2000/10/28 21:26:48 obrien Exp $");
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200201172146.g0HLkft13995>
