1
0
mirror of http://mpg123.de/trunk/.git synced 2025-10-25 04:37:34 +03:00

Merge in the poratbility enhancements from the 1.12.2 tag (yes, it's more of a branch now).

Main things are the dual-way of LFS aliases, the move of the nonexec-stack markers into mangle.h.



git-svn-id: svn://scm.orgis.org/mpg123/trunk@2736 35dc7657-300d-0410-a2e5-dc2837fedb53
This commit is contained in:
thor
2010-06-18 06:43:04 +00:00
parent adb3eaf07b
commit 70cdaebe90
40 changed files with 193 additions and 166 deletions

View File

@@ -56,9 +56,8 @@ There are various library features you can leave out via --disable options (like
1a. Large file support 1a. Large file support
The libmpg123 API includes the generic off_t type for file offsets and thus is subject to shape-shifting on systems that change off_t depending on build flags. The libmpg123 API includes the generic off_t type for file offsets and thus is subject to shape-shifting on systems that change off_t depending on build flags.
To deal with the incompatibilities that can cause, depending on your build configuration, the library name will change when large file support is enabled. To deal with the incompatibilities that can cause, the library needs to separate code paths for small and large off_t.
Since version 1.12.0, a large-file-enabled libmpg123 (the default set by configure) provides a dual-mode ABI. Depending on _FILE_OFFSET_BITS, the mpg123.h header file selects different library symbols to use for your app.
Since version 1.12.0, a large-file-enabled libmpg123 (the default set by configure) provides a dual-mode ABI to work. Depending on _FILE_OFFSET_BITS, the mpg123.h header file selects different library symbols to use for your app.
In both large-file and normal mode, the library should just work for your app. In both large-file and normal mode, the library should just work for your app.

2
NEWS
View File

@@ -17,6 +17,8 @@ TODO:
- Include dumb wrappers to provide names suffixed with _64 on 64 bit machines and _32 on 32 bit machines, respectively, to help clients that insist on defining _FILE_OFFSET_BITS where it is not needed (or with a non-large value). - Include dumb wrappers to provide names suffixed with _64 on 64 bit machines and _32 on 32 bit machines, respectively, to help clients that insist on defining _FILE_OFFSET_BITS where it is not needed (or with a non-large value).
- Tuning of the internal buffer code for feeder mode to minimize its performance impact (works in 4K blocks now). - Tuning of the internal buffer code for feeder mode to minimize its performance impact (works in 4K blocks now).
- Workaround for compiler bugs in Open64/PathScale/SunStudio (bug 3004396, suggestion by Doug Gilmore). - Workaround for compiler bugs in Open64/PathScale/SunStudio (bug 3004396, suggestion by Doug Gilmore).
Note that Sun Studio is still a tricky fellow, at least when it comes to our preprocessed assembly.
Also, x86-Open64 recently produced another segfault in layer3.c on my box... GNU and intel compilers are what one can use as something stable.
- Make mpg123_getformat() return more error codes (like MPG123_NEED_MORE). - Make mpg123_getformat() return more error codes (like MPG123_NEED_MORE).
- Fix handle I/O for clients with small file offset (32 bit when libmpg123 has 64 bit). - Fix handle I/O for clients with small file offset (32 bit when libmpg123 has 64 bit).
- Fix 3DNow(Ext) standalone builds. - Fix 3DNow(Ext) standalone builds.

View File

@@ -9,7 +9,6 @@ AC_PREREQ(2.57)
dnl ############# Initialisation dnl ############# Initialisation
d
AC_INIT([mpg123], [1.13.0], [mpg123-devel@lists.sourceforge.net]) AC_INIT([mpg123], [1.13.0], [mpg123-devel@lists.sourceforge.net])
dnl Increment API_VERSION when the API gets changes (new functions). dnl Increment API_VERSION when the API gets changes (new functions).
API_VERSION=26 API_VERSION=26
@@ -901,7 +900,7 @@ fi
lfs_alias=enabled lfs_alias=enabled
AC_ARG_ENABLE(lfs-alias, AC_ARG_ENABLE(lfs-alias,
[ --disable-lfs-alias disable alias wrappers for largefile bitness (mpg123_seek_32 in addition to mpg123_seek, mpg123_seek_64 as alias onx86-64) ], [ --disable-lfs-alias disable alias wrappers for largefile bitness (mpg123_seek_32 in addition to mpg123_seek, mpg123_seek_64 as alias on x86-64) ],
[ [
if test "x$enableval" = xno; then if test "x$enableval" = xno; then
lfs_alias="disabled" lfs_alias="disabled"
@@ -1058,13 +1057,13 @@ s_i486="$s_i386 synth_i486 dct64_i486"
s_i586="$s_i386 synth_i586" s_i586="$s_i386 synth_i586"
s_i586d="$s_i386 synth_i586_dither" s_i586d="$s_i386 synth_i586_dither"
s_3dnow="$s_i386 synth_3dnow dct64_3dnow equalizer_3dnow" s_3dnow="$s_i386 synth_3dnow dct64_3dnow equalizer_3dnow"
s_3dnowext="$s_i386 dct64_3dnowext dct64_mmx tabinit_mmx synth_3dnowext" s_3dnowext="$s_i386 dct64_3dnowext tabinit_mmx synth_3dnowext"
if test "x$layer3" = "xenabled"; then if test "x$layer3" = "xenabled"; then
s_3dnow="$s_3dnow dct36_3dnow" s_3dnow="$s_3dnow dct36_3dnow"
s_3dnowext="$s_3dnowext dct36_3dnowext" s_3dnowext="$s_3dnowext dct36_3dnowext"
fi fi
s_mmx="$s_i386 dct64_mmx tabinit_mmx synth_mmx" s_mmx="$s_i386 dct64_mmx tabinit_mmx synth_mmx"
s_sse="$s_i386 dct64_mmx tabinit_mmx dct64_sse dct64_sse_float synth_sse_float synth_stereo_sse_float synth_sse_s32 synth_stereo_sse_s32 " s_sse="$s_i386 tabinit_mmx dct64_sse dct64_sse_float synth_sse_float synth_stereo_sse_float synth_sse_s32 synth_stereo_sse_s32 "
s_x86_64="dct64_x86_64 dct64_x86_64_float synth_x86_64_float synth_x86_64_s32 synth_stereo_x86_64_float synth_stereo_x86_64_s32" s_x86_64="dct64_x86_64 dct64_x86_64_float synth_x86_64_float synth_x86_64_s32 synth_stereo_x86_64_float synth_stereo_x86_64_s32"
s_x86multi="getcpuflags" s_x86multi="getcpuflags"
s_dither="dither" s_dither="dither"

View File

@@ -502,7 +502,4 @@ ASM_NAME(dct36_3dnow):
popl %ebp popl %ebp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -42,7 +42,7 @@
#include "mangle.h" #include "mangle.h"
.text .text
ALIGN32,,31 ALIGN32
.globl ASM_NAME(dct36_3dnowext) .globl ASM_NAME(dct36_3dnowext)
/* .type ASM_NAME(dct36_3dnowext), @function */ /* .type ASM_NAME(dct36_3dnowext), @function */
ASM_NAME(dct36_3dnowext): ASM_NAME(dct36_3dnowext):
@@ -509,7 +509,4 @@ ASM_NAME(dct36_3dnowext):
ret ret
/* .size ASM_NAME(dct36_3dnowext), .-ASM_NAME(dct36_3dnowext) */ /* .size ASM_NAME(dct36_3dnowext), .-ASM_NAME(dct36_3dnowext) */
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -709,7 +709,4 @@ ASM_NAME(dct64_3dnow):
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -36,7 +36,7 @@ x_plus_minus_3dnow:
.long -2147483648 .long -2147483648
.text .text
ALIGN32,,31 ALIGN32
.globl ASM_NAME(dct64_3dnowext) .globl ASM_NAME(dct64_3dnowext)
/* .type ASM_NAME(dct64_3dnowext), @function */ /* .type ASM_NAME(dct64_3dnowext), @function */
ASM_NAME(dct64_3dnowext): ASM_NAME(dct64_3dnowext):
@@ -711,7 +711,4 @@ ASM_NAME(dct64_3dnowext):
ret ret
/* .size ASM_NAME(dct64_3dnowext), .-ASM_NAME(dct64_3dnowext) */ /* .size ASM_NAME(dct64_3dnowext), .-ASM_NAME(dct64_3dnowext) */
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -808,8 +808,4 @@ ASM_NAME(dct64_MMX):
popl %ebx popl %ebx
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -451,7 +451,4 @@ ASM_NAME(dct64_sse):
popl %ebp popl %ebp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -398,7 +398,4 @@ ASM_NAME(dct64_real_sse):
popl %ebp popl %ebp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -461,7 +461,4 @@ ASM_NAME(dct64_x86_64):
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -423,7 +423,4 @@ ASM_NAME(dct64_real_x86_64):
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -67,7 +67,4 @@ ASM_NAME(do_equalizer_3dnow):
popl %esi popl %esi
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -88,7 +88,4 @@ ASM_NAME(getcpuflags):
popl %ebp popl %ebp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -8,28 +8,58 @@
Use case: Client code on Linux/x86-64 that defines _FILE_OFFSET_BITS to 64, which is the only choice on that platform anyway. It should be no-op, but prompts the platform-agnostic header of mpg123 to define API calls with the corresponding suffix. Use case: Client code on Linux/x86-64 that defines _FILE_OFFSET_BITS to 64, which is the only choice on that platform anyway. It should be no-op, but prompts the platform-agnostic header of mpg123 to define API calls with the corresponding suffix.
This file provides the names for this case. It's cruft, but glibc does it, too -- so people rely on it. This file provides the names for this case. It's cruft, but glibc does it, too -- so people rely on it.
Oh, and it also caters for the lunatics that define _FILE_OFFSET_BITS=32 on 32 bit platforms. Oh, and it also caters for the lunatics that define _FILE_OFFSET_BITS=32 on 32 bit platforms.
There is also the strange case that the mpg123 build itself is configured for unnecessary _FILE_OFFSET_BITS == LFS_ALIAS_BITS =^ sizeof(long). In that case, the "native" function will have the suffix and the alias shall be provided without the suffix.
So, two basic cases:
1. mpg123_bla_32 alias for mpg123_bla
2. mpg123_bla alias for mpg123_bla_32
Confusing, I know. It sucks.
*/ */
#include "config.h" #include "config.h"
/* Hack for Solaris: Some system headers included from compat.h might force _FILE_OFFSET_BITS. Need to follow that here. */
#include "compat.h"
#ifndef LFS_ALIAS_BITS #ifndef LFS_ALIAS_BITS
#error "I need the count of alias bits here." #error "I need the count of alias bits here."
#endif #endif
/* Use the plain function names. */ #define MACROCAT_REALLY(a, b) a ## b
#define MACROCAT(a, b) MACROCAT_REALLY(a, b)
/* This is wicked switchery: Decide which way the aliases are facing. */
#if _FILE_OFFSET_BITS+0 == LFS_ALIAS_BITS
/* The native functions are actually _with_ suffix, so let the mpg123 header use large file hackery to define the correct interfaces. */
#include "mpg123.h"
/* Don't forget to undef the function symbols before usage... */
/* The native functions have suffix, the aliases not. */
#define NATIVE_SUFFIX MACROCAT(_, _FILE_OFFSET_BITS)
#define NATIVE_NAME(func) MACROCAT(func, NATIVE_SUFFIX)
#define ALIAS_NAME(func) func
#else
/* Native functions are without suffix... */
#define MPG123_NO_LARGENAME #define MPG123_NO_LARGENAME
#include "mpg123.h" #include "mpg123.h"
/* The alias functions have suffix, the native ones not. */
#define ALIAS_SUFFIX MACROCAT(_, LFS_ALIAS_BITS)
#define ALIAS_NAME(func) MACROCAT(func, ALIAS_SUFFIX)
#define NATIVE_NAME(func) func
#endif
/* Now get the rest of the infrastructure on speed, namely attribute_align_arg, to stay safe. */ /* Now get the rest of the infrastructure on speed, namely attribute_align_arg, to stay safe. */
#include "mpg123lib_intern.h" #include "mpg123lib_intern.h"
#define MACROCAT_REALLY(a, b) a ## b
#define MACROCAT(a, b) MACROCAT_REALLY(a, b)
#define ALIAS_SUFFIX MACROCAT(_, LFS_ALIAS_BITS)
#define ALIAS_NAME(func) MACROCAT(func, ALIAS_SUFFIX)
/* /*
Extract the list of functions we need wrappers for, pregenerating the wrappers for simple cases: Extract the list of functions we need wrappers for, pregenerating the wrappers for simple cases (inline script for nedit):
perl -ne ' perl -ne '
if(/^\s*EXPORT\s+(\S+)\s+(mpg123_\S+)\((.*)\);\s*$/) if(/^\s*EXPORT\s+(\S+)\s+(mpg123_\S+)\((.*)\);\s*$/)
{ {
@@ -49,14 +79,19 @@ if(/^\s*EXPORT\s+(\S+)\s+(mpg123_\S+)\((.*)\);\s*$/)
$nargs = "Human: figure me out." if($nargs =~ /\(/); $nargs = "Human: figure me out." if($nargs =~ /\(/);
print <<EOT print <<EOT
##ifdef $name
##undef $name
##endif
$type attribute_align_arg ALIAS_NAME($name)($args) $type attribute_align_arg ALIAS_NAME($name)($args)
{ {
return $name($nargs); return NATIVE_NAME($name)($nargs);
} }
EOT EOT
}' < mpg123.h.in }' < mpg123.h.in
*/ */
<<<<<<< .working
int attribute_align_arg ALIAS_NAME(mpg123_open)(mpg123_handle *mh, const char *path) int attribute_align_arg ALIAS_NAME(mpg123_open)(mpg123_handle *mh, const char *path)
{ {
return mpg123_open(mh, path); return mpg123_open(mh, path);
@@ -72,82 +107,156 @@ int attribute_align_arg ALIAS_NAME(mpg123_open_handle)(mpg123_handle *mh, void *
return mpg123_open_handle(mh, iohandle); return mpg123_open_handle(mh, iohandle);
} }
=======
#ifdef mpg123_open
#undef mpg123_open
#endif
int attribute_align_arg ALIAS_NAME(mpg123_open)(mpg123_handle *mh, const char *path)
{
return NATIVE_NAME(mpg123_open)(mh, path);
}
#ifdef mpg123_open_fd
#undef mpg123_open_fd
#endif
int attribute_align_arg ALIAS_NAME(mpg123_open_fd)(mpg123_handle *mh, int fd)
{
return NATIVE_NAME(mpg123_open_fd)(mh, fd);
}
#ifdef mpg123_open_handle
#undef mpg123_open_handle
#endif
int attribute_align_arg ALIAS_NAME(mpg123_open_handle)(mpg123_handle *mh, void *iohandle)
{
return NATIVE_NAME(mpg123_open_handle)(mh, iohandle);
}
#ifdef mpg123_decode_frame
#undef mpg123_decode_frame
#endif
>>>>>>> .merge-rechts.r2735
int attribute_align_arg ALIAS_NAME(mpg123_decode_frame)(mpg123_handle *mh, long *num, unsigned char **audio, size_t *bytes) int attribute_align_arg ALIAS_NAME(mpg123_decode_frame)(mpg123_handle *mh, long *num, unsigned char **audio, size_t *bytes)
{ {
return mpg123_decode_frame(mh, num, audio, bytes); return NATIVE_NAME(mpg123_decode_frame)(mh, num, audio, bytes);
} }
#ifdef mpg123_framebyframe_decode
#undef mpg123_framebyframe_decode
#endif
int attribute_align_arg ALIAS_NAME(mpg123_framebyframe_decode)(mpg123_handle *mh, long *num, unsigned char **audio, size_t *bytes) int attribute_align_arg ALIAS_NAME(mpg123_framebyframe_decode)(mpg123_handle *mh, long *num, unsigned char **audio, size_t *bytes)
{ {
return mpg123_framebyframe_decode(mh, num, audio, bytes); return NATIVE_NAME(mpg123_framebyframe_decode)(mh, num, audio, bytes);
} }
#ifdef mpg123_tell
#undef mpg123_tell
#endif
long attribute_align_arg ALIAS_NAME(mpg123_tell)(mpg123_handle *mh) long attribute_align_arg ALIAS_NAME(mpg123_tell)(mpg123_handle *mh)
{ {
return mpg123_tell(mh); return NATIVE_NAME(mpg123_tell)(mh);
} }
#ifdef mpg123_tellframe
#undef mpg123_tellframe
#endif
long attribute_align_arg ALIAS_NAME(mpg123_tellframe)(mpg123_handle *mh) long attribute_align_arg ALIAS_NAME(mpg123_tellframe)(mpg123_handle *mh)
{ {
return mpg123_tellframe(mh); return NATIVE_NAME(mpg123_tellframe)(mh);
} }
#ifdef mpg123_tell_stream
#undef mpg123_tell_stream
#endif
long attribute_align_arg ALIAS_NAME(mpg123_tell_stream)(mpg123_handle *mh) long attribute_align_arg ALIAS_NAME(mpg123_tell_stream)(mpg123_handle *mh)
{ {
return mpg123_tell_stream(mh); return NATIVE_NAME(mpg123_tell_stream)(mh);
} }
#ifdef mpg123_seek
#undef mpg123_seek
#endif
long attribute_align_arg ALIAS_NAME(mpg123_seek)(mpg123_handle *mh, long sampleoff, int whence) long attribute_align_arg ALIAS_NAME(mpg123_seek)(mpg123_handle *mh, long sampleoff, int whence)
{ {
return mpg123_seek(mh, sampleoff, whence); return NATIVE_NAME(mpg123_seek)(mh, sampleoff, whence);
} }
#ifdef mpg123_feedseek
#undef mpg123_feedseek
#endif
long attribute_align_arg ALIAS_NAME(mpg123_feedseek)(mpg123_handle *mh, long sampleoff, int whence, long *input_offset) long attribute_align_arg ALIAS_NAME(mpg123_feedseek)(mpg123_handle *mh, long sampleoff, int whence, long *input_offset)
{ {
return mpg123_feedseek(mh, sampleoff, whence, input_offset); return NATIVE_NAME(mpg123_feedseek)(mh, sampleoff, whence, input_offset);
} }
#ifdef mpg123_seek_frame
#undef mpg123_seek_frame
#endif
long attribute_align_arg ALIAS_NAME(mpg123_seek_frame)(mpg123_handle *mh, long frameoff, int whence) long attribute_align_arg ALIAS_NAME(mpg123_seek_frame)(mpg123_handle *mh, long frameoff, int whence)
{ {
return mpg123_seek_frame(mh, frameoff, whence); return NATIVE_NAME(mpg123_seek_frame)(mh, frameoff, whence);
} }
#ifdef mpg123_timeframe
#undef mpg123_timeframe
#endif
long attribute_align_arg ALIAS_NAME(mpg123_timeframe)(mpg123_handle *mh, double sec) long attribute_align_arg ALIAS_NAME(mpg123_timeframe)(mpg123_handle *mh, double sec)
{ {
return mpg123_timeframe(mh, sec); return NATIVE_NAME(mpg123_timeframe)(mh, sec);
} }
#ifdef mpg123_index
#undef mpg123_index
#endif
int attribute_align_arg ALIAS_NAME(mpg123_index)(mpg123_handle *mh, long **offsets, long *step, size_t *fill) int attribute_align_arg ALIAS_NAME(mpg123_index)(mpg123_handle *mh, long **offsets, long *step, size_t *fill)
{ {
return mpg123_index(mh, offsets, step, fill); return NATIVE_NAME(mpg123_index)(mh, offsets, step, fill);
} }
#ifdef mpg123_set_index
#undef mpg123_set_index
#endif
int attribute_align_arg ALIAS_NAME(mpg123_set_index)(mpg123_handle *mh, long *offsets, long step, size_t fill) int attribute_align_arg ALIAS_NAME(mpg123_set_index)(mpg123_handle *mh, long *offsets, long step, size_t fill)
{ {
return mpg123_set_index(mh, offsets, step, fill); return NATIVE_NAME(mpg123_set_index)(mh, offsets, step, fill);
} }
#ifdef mpg123_position
#undef mpg123_position
#endif
int attribute_align_arg ALIAS_NAME(mpg123_position)( mpg123_handle *mh, long frame_offset, long buffered_bytes, long *current_frame, long *frames_left, double *current_seconds, double *seconds_left) int attribute_align_arg ALIAS_NAME(mpg123_position)( mpg123_handle *mh, long frame_offset, long buffered_bytes, long *current_frame, long *frames_left, double *current_seconds, double *seconds_left)
{ {
return mpg123_position(mh, frame_offset, buffered_bytes, current_frame, frames_left, current_seconds, seconds_left); return NATIVE_NAME(mpg123_position)(mh, frame_offset, buffered_bytes, current_frame, frames_left, current_seconds, seconds_left);
} }
#ifdef mpg123_length
#undef mpg123_length
#endif
long attribute_align_arg ALIAS_NAME(mpg123_length)(mpg123_handle *mh) long attribute_align_arg ALIAS_NAME(mpg123_length)(mpg123_handle *mh)
{ {
return mpg123_length(mh); return NATIVE_NAME(mpg123_length)(mh);
} }
#ifdef mpg123_set_filesize
#undef mpg123_set_filesize
#endif
int attribute_align_arg ALIAS_NAME(mpg123_set_filesize)(mpg123_handle *mh, long size) int attribute_align_arg ALIAS_NAME(mpg123_set_filesize)(mpg123_handle *mh, long size)
{ {
return mpg123_set_filesize(mh, size); return NATIVE_NAME(mpg123_set_filesize)(mh, size);
} }
#ifdef mpg123_replace_reader
#undef mpg123_replace_reader
#endif
int attribute_align_arg ALIAS_NAME(mpg123_replace_reader)(mpg123_handle *mh, ssize_t (*r_read) (int, void *, size_t), long (*r_lseek)(int, long, int)) int attribute_align_arg ALIAS_NAME(mpg123_replace_reader)(mpg123_handle *mh, ssize_t (*r_read) (int, void *, size_t), long (*r_lseek)(int, long, int))
{ {
return mpg123_replace_reader(mh, r_read, r_lseek); return NATIVE_NAME(mpg123_replace_reader)(mh, r_read, r_lseek);
} }
#ifdef mpg123_replace_reader_handle
#undef mpg123_replace_reader_handle
#endif
int attribute_align_arg ALIAS_NAME(mpg123_replace_reader_handle)(mpg123_handle *mh, ssize_t (*r_read) (void *, void *, size_t), long (*r_lseek)(void *, long, int), void (*cleanup)(void*)) int attribute_align_arg ALIAS_NAME(mpg123_replace_reader_handle)(mpg123_handle *mh, ssize_t (*r_read) (void *, void *, size_t), long (*r_lseek)(void *, long, int), void (*cleanup)(void*))
{ {
return mpg123_replace_reader_handle(mh, r_read, r_lseek, cleanup); return NATIVE_NAME(mpg123_replace_reader_handle)(mh, r_read, r_lseek, cleanup);
} }

View File

@@ -57,5 +57,14 @@
#else #else
#define BSS .bss #define BSS .bss
#endif #endif
/* Mark non-executable stack.
It's mainly for GNU on Linux... who else does (not) like this? */
#if !defined(__SUNPRO_C) && defined(__linux__) && defined(__ELF__)
#define NONEXEC_STACK .section .note.GNU-stack,"",%progbits
#else
#define NONEXEC_STACK
#endif
#endif /* !__MANGLE_H */ #endif /* !__MANGLE_H */

View File

@@ -25,8 +25,14 @@
# define attribute_align_arg __attribute__((force_align_arg_pointer)) # define attribute_align_arg __attribute__((force_align_arg_pointer))
/* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */ /* The gcc that can align the stack does not need the check... nor does it work with gcc 4.3+, anyway. */
#else #else
# define attribute_align_arg # define attribute_align_arg
# define NEED_ALIGNCHECK /* Other compilers get code to catch misaligned stack. */ /* Other compilers get code to catch misaligned stack.
Well, except Sun Studio, which accepts the aligned attribute but does not honor it. */
#if !defined(__SUNPRO_C)
# define NEED_ALIGNCHECK
#endif
#endif #endif
#endif #endif
#else #else

View File

@@ -315,7 +315,4 @@ ASM_NAME(synth_1to1_3dnow_asm):
addl $24,%esp addl $24,%esp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -3,7 +3,4 @@
#define SYNTH_NAME ASM_NAME(synth_1to1_3dnowext_asm) #define SYNTH_NAME ASM_NAME(synth_1to1_3dnowext_asm)
#include "synth_sse3d.h" #include "synth_sse3d.h"
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -333,7 +333,4 @@ ASM_NAME(synth_1to1_i586_asm):
addl $12,%esp addl $12,%esp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -372,7 +372,4 @@ ASM_NAME(synth_1to1_i586_asm_dither):
/* The stack must be now: 0=back 4=bandptr 8=channel 12=out 16=buffs 20=bo */ /* The stack must be now: 0=back 4=bandptr 8=channel 12=out 16=buffs 20=bo */
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -122,8 +122,4 @@ ASM_NAME(synth_1to1_MMX):
popl %ebp popl %ebp
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -3,7 +3,4 @@
#define SYNTH_NAME ASM_NAME(synth_1to1_sse_asm) #define SYNTH_NAME ASM_NAME(synth_1to1_sse_asm)
#include "synth_sse3d.h" #include "synth_sse3d.h"
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -41,7 +41,7 @@ null_one:
.long 65535 .long 65535
.text .text
ALIGN16,,15 ALIGN16
/* void SYNTH_NAME(real *bandPtr, int channel, short *samples, short *buffs, int *bo, float *decwins) */ /* void SYNTH_NAME(real *bandPtr, int channel, short *samples, short *buffs, int *bo, float *decwins) */
.globl SYNTH_NAME .globl SYNTH_NAME
SYNTH_NAME: SYNTH_NAME:

View File

@@ -291,7 +291,4 @@ Loop_start_2:
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -238,7 +238,4 @@ Loop_start_2:
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -303,7 +303,4 @@ Loop_start_2:
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -505,7 +505,4 @@ Loop_start_2:
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -413,7 +413,4 @@ Loop_start_2:
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -537,7 +537,4 @@ Loop_start_2:
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -332,7 +332,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -451,7 +451,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -393,7 +393,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -470,7 +470,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -241,7 +241,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -298,7 +298,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -256,7 +256,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -309,7 +309,4 @@ Loop_start_2:
#endif #endif
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -207,7 +207,4 @@ ASM_NAME(make_decode_tables_mmx_asm):
popl %edi popl %edi
ret ret
/* Mark non-executable stack. */ NONEXEC_STACK
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif

View File

@@ -151,7 +151,8 @@ static int open_alsa(audio_output_t *ao)
snd_pcm_t *pcm=NULL; snd_pcm_t *pcm=NULL;
debug1("open_alsa with %p", ao->userptr); debug1("open_alsa with %p", ao->userptr);
snd_lib_error_set_handler(AOQUIET ? error_ignorer : NULL); if(AOQUIET) snd_lib_error_set_handler(error_ignorer);
pcm_name = ao->device ? ao->device : "default"; pcm_name = ao->device ? ao->device : "default";
if (snd_pcm_open(&pcm, pcm_name, SND_PCM_STREAM_PLAYBACK, 0) < 0) { if (snd_pcm_open(&pcm, pcm_name, SND_PCM_STREAM_PLAYBACK, 0) < 0) {
if(!AOQUIET) error1("cannot open device %s", pcm_name); if(!AOQUIET) error1("cannot open device %s", pcm_name);