Fix linker script.
Skip empty GNU_STACK section in elf2aout utility.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
TOPSRC = $(shell cd ../../..; pwd)
|
||||
include $(TOPSRC)/target.mk
|
||||
|
||||
CFLAGS = -O
|
||||
CFLAGS = -O -Werror
|
||||
SRCS = chown.c
|
||||
OBJS = chown.o
|
||||
MAN = chown.0
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
#include <sys/dir.h>
|
||||
#include <grp.h>
|
||||
#include <strings.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
static char *fchdirmsg = "Can't fchdir() back to starting directory";
|
||||
struct passwd *pwd;
|
||||
@@ -27,88 +29,52 @@ int status;
|
||||
int fflag;
|
||||
int rflag;
|
||||
|
||||
main(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
register int c;
|
||||
register gid_t gid;
|
||||
register char *cp, *group;
|
||||
struct group *grp;
|
||||
int fcurdir;
|
||||
|
||||
argc--, argv++;
|
||||
while (argc > 0 && argv[0][0] == '-') {
|
||||
for (cp = &argv[0][1]; *cp; cp++) switch (*cp) {
|
||||
|
||||
case 'f':
|
||||
fflag++;
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
rflag++;
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal(255, "unknown option: %c", *cp);
|
||||
}
|
||||
argv++, argc--;
|
||||
}
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "usage: chown [-fR] owner[.group] file ...\n");
|
||||
exit(-1);
|
||||
}
|
||||
gid = -1;
|
||||
group = index(argv[0], '.');
|
||||
if (group != NULL) {
|
||||
*group++ = '\0';
|
||||
if (!isnumber(group)) {
|
||||
if ((grp = getgrnam(group)) == NULL)
|
||||
fatal(255, "unknown group: %s",group);
|
||||
gid = grp -> gr_gid;
|
||||
(void) endgrent();
|
||||
} else if (*group != '\0')
|
||||
gid = atoi(group);
|
||||
}
|
||||
if (!isnumber(argv[0])) {
|
||||
if ((pwd = getpwnam(argv[0])) == NULL)
|
||||
fatal(255, "unknown user id: %s",argv[0]);
|
||||
uid = pwd->pw_uid;
|
||||
} else
|
||||
uid = atoi(argv[0]);
|
||||
|
||||
fcurdir = open(".", O_RDONLY);
|
||||
if (fcurdir < 0)
|
||||
fatal(255, "Can't open .");
|
||||
|
||||
for (c = 1; c < argc; c++) {
|
||||
/* do stat for directory arguments */
|
||||
if (lstat(argv[c], &stbuf) < 0) {
|
||||
status += Perror(argv[c]);
|
||||
continue;
|
||||
}
|
||||
if (rflag && ((stbuf.st_mode&S_IFMT) == S_IFDIR)) {
|
||||
status += chownr(argv[c], uid, gid, fcurdir);
|
||||
continue;
|
||||
}
|
||||
if (chown(argv[c], uid, gid)) {
|
||||
status += Perror(argv[c]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
exit(status);
|
||||
}
|
||||
|
||||
int
|
||||
isnumber(s)
|
||||
char *s;
|
||||
{
|
||||
register c;
|
||||
int c;
|
||||
|
||||
while(c = *s++)
|
||||
while ((c = *s++))
|
||||
if (!isdigit(c))
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int
|
||||
Perror(s)
|
||||
char *s;
|
||||
{
|
||||
if (!fflag) {
|
||||
fprintf(stderr, "chown: ");
|
||||
perror(s);
|
||||
}
|
||||
return (!fflag);
|
||||
}
|
||||
|
||||
int
|
||||
error(fmt, a)
|
||||
char *fmt, *a;
|
||||
{
|
||||
if (!fflag) {
|
||||
fprintf(stderr, "chown: ");
|
||||
fprintf(stderr, fmt, a);
|
||||
putc('\n', stderr);
|
||||
}
|
||||
return (!fflag);
|
||||
}
|
||||
|
||||
void
|
||||
fatal(status, fmt, a)
|
||||
int status;
|
||||
char *fmt, *a;
|
||||
{
|
||||
fflag = 0;
|
||||
(void) error(fmt, a);
|
||||
exit(status);
|
||||
}
|
||||
|
||||
int
|
||||
chownr(dir, uid, gid, savedir)
|
||||
char *dir;
|
||||
{
|
||||
@@ -150,41 +116,80 @@ chownr(dir, uid, gid, savedir)
|
||||
(ecode = Perror(dp->d_name)))
|
||||
break;
|
||||
}
|
||||
if (fchdir(savedir) < 0)
|
||||
fatal(255, fchdirmsg);
|
||||
if (fchdir(savedir) < 0)
|
||||
fatal(255, fchdirmsg, "");
|
||||
closedir(dirp);
|
||||
return (ecode);
|
||||
}
|
||||
|
||||
error(fmt, a)
|
||||
char *fmt, *a;
|
||||
int
|
||||
main(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
register int c;
|
||||
register gid_t gid;
|
||||
register char *cp, *group;
|
||||
struct group *grp;
|
||||
int fcurdir;
|
||||
|
||||
if (!fflag) {
|
||||
fprintf(stderr, "chown: ");
|
||||
fprintf(stderr, fmt, a);
|
||||
putc('\n', stderr);
|
||||
argc--, argv++;
|
||||
while (argc > 0 && argv[0][0] == '-') {
|
||||
for (cp = &argv[0][1]; *cp; cp++) switch (*cp) {
|
||||
|
||||
case 'f':
|
||||
fflag++;
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
rflag++;
|
||||
break;
|
||||
|
||||
default:
|
||||
fatal(255, "unknown option: %c", (char*)(int)*cp);
|
||||
}
|
||||
argv++, argc--;
|
||||
}
|
||||
return (!fflag);
|
||||
}
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "usage: chown [-fR] owner[.group] file ...\n");
|
||||
exit(-1);
|
||||
}
|
||||
gid = -1;
|
||||
group = index(argv[0], '.');
|
||||
if (group != NULL) {
|
||||
*group++ = '\0';
|
||||
if (!isnumber(group)) {
|
||||
if ((grp = getgrnam(group)) == NULL)
|
||||
fatal(255, "unknown group: %s", group);
|
||||
gid = grp -> gr_gid;
|
||||
(void) endgrent();
|
||||
} else if (*group != '\0')
|
||||
gid = atoi(group);
|
||||
}
|
||||
if (!isnumber(argv[0])) {
|
||||
if ((pwd = getpwnam(argv[0])) == NULL)
|
||||
fatal(255, "unknown user id: %s", argv[0]);
|
||||
uid = pwd->pw_uid;
|
||||
} else
|
||||
uid = atoi(argv[0]);
|
||||
|
||||
fatal(status, fmt, a)
|
||||
int status;
|
||||
char *fmt, *a;
|
||||
{
|
||||
fcurdir = open(".", O_RDONLY);
|
||||
if (fcurdir < 0)
|
||||
fatal(255, "Can't open .", "");
|
||||
|
||||
fflag = 0;
|
||||
(void) error(fmt, a);
|
||||
for (c = 1; c < argc; c++) {
|
||||
/* do stat for directory arguments */
|
||||
if (lstat(argv[c], &stbuf) < 0) {
|
||||
status += Perror(argv[c]);
|
||||
continue;
|
||||
}
|
||||
if (rflag && ((stbuf.st_mode&S_IFMT) == S_IFDIR)) {
|
||||
status += chownr(argv[c], uid, gid, fcurdir);
|
||||
continue;
|
||||
}
|
||||
if (chown(argv[c], uid, gid)) {
|
||||
status += Perror(argv[c]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
exit(status);
|
||||
}
|
||||
|
||||
Perror(s)
|
||||
char *s;
|
||||
{
|
||||
|
||||
if (!fflag) {
|
||||
fprintf(stderr, "chown: ");
|
||||
perror(s);
|
||||
}
|
||||
return (!fflag);
|
||||
}
|
||||
|
||||
@@ -250,4 +250,5 @@ SECTIONS
|
||||
.gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) }
|
||||
/DISCARD/ : { *(.rel.dyn) }
|
||||
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }
|
||||
/DISCARD/ : { *(.reginfo) *(.MIPS.abiflags) *(.got.plt) *(.got) }
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ OBJS = adddf3.o \
|
||||
fixdfsi.o \
|
||||
floatsidf.o \
|
||||
floatsisf.o \
|
||||
fp_mode.o \
|
||||
muldf3.o \
|
||||
mulsf3.o \
|
||||
subsf3.o
|
||||
|
||||
24
src/libclang/fp_mode.c
Normal file
24
src/libclang/fp_mode.c
Normal file
@@ -0,0 +1,24 @@
|
||||
//===----- lib/fp_mode.c - Floaing-point environment mode utilities --C -*-===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file provides a default implementation of fp_mode.h for architectures
|
||||
// that does not support or does not have an implementation of floating point
|
||||
// environment mode.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "fp_mode.h"
|
||||
|
||||
// IEEE-754 default rounding (to nearest, ties to even).
|
||||
FE_ROUND_MODE __fe_getround() {
|
||||
return FE_TONEAREST;
|
||||
}
|
||||
|
||||
int __fe_raise_inexact() {
|
||||
return 0;
|
||||
}
|
||||
@@ -59,7 +59,7 @@ ELF2AOUT = $(TOPSRC)/tools/elf2aout/elf2aout
|
||||
|
||||
CFLAGS = -Os -nostdinc
|
||||
|
||||
LDFLAGS = -T$(TOPSRC)/src/elf32-mips.ld $(TOPSRC)/src/crt0.o -L$(TOPSRC)/src
|
||||
LDFLAGS = --nmagic -T$(TOPSRC)/src/elf32-mips.ld $(TOPSRC)/src/crt0.o -L$(TOPSRC)/src
|
||||
LIBS = -lc -lclang
|
||||
|
||||
# Enable mips16e instruction set by default
|
||||
|
||||
@@ -447,9 +447,14 @@ usage: fprintf(stderr,
|
||||
ph[i].p_type == PT_GNU_EH_FRAME)
|
||||
continue;
|
||||
|
||||
/* Ignore zero sized segments. */
|
||||
if (ph[i].p_memsz == 0)
|
||||
continue;
|
||||
|
||||
if (verbose)
|
||||
printf ("Section type=%x flags=%x vaddr=%x filesz=%x\n",
|
||||
ph[i].p_type, ph[i].p_flags, ph[i].p_vaddr, ph[i].p_filesz);
|
||||
|
||||
/* Section types we can't handle... */
|
||||
if (ph[i].p_type != PT_LOAD && ph[i].p_type != PT_GNU_EH_FRAME)
|
||||
errx(1, "Program header %d type %x can't be converted.", i, ph[i].p_type);
|
||||
|
||||
Reference in New Issue
Block a user