From e0d2b8e59beba49d6c2bdcf24257cc1834ce2b26 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Tue, 11 Jan 2011 19:46:56 +0100 Subject: __psfs_parse_spec: always use long int for %p closes bug #3037 Signed-off-by: Bernhard Reutner-Fischer --- libc/stdio/_scanf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libc') diff --git a/libc/stdio/_scanf.c b/libc/stdio/_scanf.c index 34c1c9abd..28cd21e30 100644 --- a/libc/stdio/_scanf.c +++ b/libc/stdio/_scanf.c @@ -924,7 +924,10 @@ int attribute_hidden __psfs_parse_spec(register psfs_t *psfs) goto ERROR_EINVAL; } - if ((p_m_spec_chars >= CONV_c) + if (p_m_spec_chars == CONV_p) { + /* a pointer has the same size as 'long int' */ + psfs->dataargtype = PA_FLAG_LONG; + } else if ((p_m_spec_chars >= CONV_c) && (psfs->dataargtype & PA_FLAG_LONG)) { p_m_spec_chars -= 3; /* lc -> C, ls -> S, l[ -> ?? */ } -- cgit v1.2.3 From 8fdc17c2ba1322712604d88dca48157068e6aadb Mon Sep 17 00:00:00 2001 From: Roman I Khimov Date: Thu, 23 Dec 2010 11:57:49 +0300 Subject: syslog: fix 'everyone logs with user facility' It's been found that on uclibc-based system most of the programs log with 'user' facility despite the calls to openlog() with other facilities explicitly set. Most but not all. Investigating that I've found that the ones logging with proper facilities used LOG_NDELAY in openlog(). The problem is that LogFacility is overwritten in openlog_intern and LOG_USER is passed to it from vsyslog() no matter what the program set with openlog(). Signed-off-by: Roman I Khimov Signed-off-by: Bernhard Reutner-Fischer --- libc/misc/syslog/syslog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libc') diff --git a/libc/misc/syslog/syslog.c b/libc/misc/syslog/syslog.c index b10a55615..f1b848f0b 100644 --- a/libc/misc/syslog/syslog.c +++ b/libc/misc/syslog/syslog.c @@ -205,7 +205,7 @@ vsyslog(int pri, const char *fmt, va_list ap) if ((LogMask & LOG_MASK(LOG_PRI(pri))) == 0) goto getout; if (LogFile < 0 || !connected) - openlog_intern(NULL, LogStat | LOG_NDELAY, LOG_USER); + openlog_intern(NULL, LogStat | LOG_NDELAY, (int)LogFacility << 3); /* Set default facility if none specified. */ if ((pri & LOG_FACMASK) == 0) -- cgit v1.2.3 From 387b2e49cbb6aedcc6136fb18fb232dada563cf6 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 15 Jan 2011 16:21:43 -0800 Subject: cris: Fix build issues Thanks Waldemar Brodkorb for reporting Signed-off-by: Khem Raj --- libc/sysdeps/linux/cris/sys/user.h | 81 ++++++++++++++++++++++++++++++++++++++ libc/sysdeps/linux/cris/sysdep.h | 2 + 2 files changed, 83 insertions(+) create mode 100644 libc/sysdeps/linux/cris/sys/user.h (limited to 'libc') diff --git a/libc/sysdeps/linux/cris/sys/user.h b/libc/sysdeps/linux/cris/sys/user.h new file mode 100644 index 000000000..d629c30d7 --- /dev/null +++ b/libc/sysdeps/linux/cris/sys/user.h @@ -0,0 +1,81 @@ +#ifndef __ASM_CRIS_USER_H +#define __ASM_CRIS_USER_H + +/* User-mode register used for core dumps. */ + +struct user_fpregs { +}; + +struct user_regs_struct { + unsigned long r0; /* General registers. */ + unsigned long r1; + unsigned long r2; + unsigned long r3; + unsigned long r4; + unsigned long r5; + unsigned long r6; + unsigned long r7; + unsigned long r8; + unsigned long r9; + unsigned long r10; + unsigned long r11; + unsigned long r12; + unsigned long r13; + unsigned long sp; /* R14, Stack pointer. */ + unsigned long acr; /* R15, Address calculation register. */ + unsigned long bz; /* P0, Constant zero (8-bits). */ + unsigned long vr; /* P1, Version register (8-bits). */ + unsigned long pid; /* P2, Process ID (8-bits). */ + unsigned long srs; /* P3, Support register select (8-bits). */ + unsigned long wz; /* P4, Constant zero (16-bits). */ + unsigned long exs; /* P5, Exception status. */ + unsigned long eda; /* P6, Exception data address. */ + unsigned long mof; /* P7, Multiply overflow regiter. */ + unsigned long dz; /* P8, Constant zero (32-bits). */ + unsigned long ebp; /* P9, Exception base pointer. */ + unsigned long erp; /* P10, Exception return pointer. */ + unsigned long srp; /* P11, Subroutine return pointer. */ + unsigned long nrp; /* P12, NMI return pointer. */ + unsigned long ccs; /* P13, Condition code stack. */ + unsigned long usp; /* P14, User mode stack pointer. */ + unsigned long spc; /* P15, Single step PC. */ +}; + +/* + * Core file format: The core file is written in such a way that gdb + * can understand it and provide useful information to the user (under + * linux we use the `trad-core' bfd). The file contents are as follows: + * + * upage: 1 page consisting of a user struct that tells gdb + * what is present in the file. Directly after this is a + * copy of the task_struct, which is currently not used by gdb, + * but it may come in handy at some point. All of the registers + * are stored as part of the upage. The upage should always be + * only one page long. + * data: The data segment follows next. We use current->end_text to + * current->brk to pick up all of the user variables, plus any memory + * that may have been sbrk'ed. No attempt is made to determine if a + * page is demand-zero or if a page is totally unused, we just cover + * the entire range. All of the addresses are rounded in such a way + * that an integral number of pages is written. + * stack: We need the stack information in order to get a meaningful + * backtrace. We need to write the data from usp to + * current->start_stack, so we round each of these in order to be able + * to write an integer number of pages. + */ + +struct user { + struct user_regs_struct regs; /* entire machine state */ + size_t u_tsize; /* text size (pages) */ + size_t u_dsize; /* data size (pages) */ + size_t u_ssize; /* stack size (pages) */ + unsigned long start_code; /* text starting address */ + unsigned long start_data; /* data starting address */ + unsigned long start_stack; /* stack starting address */ + long int signal; /* signal causing core dump */ + unsigned long u_ar0; /* help gdb find registers */ + unsigned long magic; /* identifies a core file */ + char u_comm[32]; /* user command name */ +}; + +#endif /* __ASM_CRIS_USER_H */ diff --git a/libc/sysdeps/linux/cris/sysdep.h b/libc/sysdeps/linux/cris/sysdep.h index 593e7772e..5960fe235 100644 --- a/libc/sysdeps/linux/cris/sysdep.h +++ b/libc/sysdeps/linux/cris/sysdep.h @@ -20,6 +20,8 @@ #ifndef _SYSDEP_H_ #define _SYSDEP_H_ +#include + #ifndef C_LABEL /* Define a macro we can use to construct the asm name for a C symbol. */ -- cgit v1.2.3