On Tue, Mar 18, 2025 at 1:07 PM Iain Sandoe <[email protected]> wrote:
>
>
>
> > On 18 Mar 2025, at 12:01, Richard Biener <[email protected]> wrote:
> >
> > On Tue, Mar 18, 2025 at 12:13 PM Iain Sandoe <[email protected]> wrote:
> >>
> >> tested on x86_64/aarch64 Linux and x86_64-darwin, OK for trunk?
> >> thanks
> >> Iain
> >>
> >> --- 8< ---
> >>
> >> This adds a configure check for get_current_dir_name and falls back
> >> to getcwd() if it is not available on the host.
> >>
> >> PR cobol/119301
> >>
> >> gcc/cobol/ChangeLog:
> >>
> >> * util.cc: Check for the availability of get_current_dir_name
> >> and fall back to getcwd() if it is not present on the host.
> >>
> >> gcc/ChangeLog:
> >>
> >> * config.in: Regenerate.
> >> * configure: Regenerate.
> >> * configure.ac: Add check for get_current_dir_name.
> >>
> >> Signed-off-by: Iain Sandoe <[email protected]>
> >> ---
> >> gcc/cobol/util.cc | 9 +++++++++
> >> gcc/config.in | 6 ++++++
> >> gcc/configure | 2 +-
> >> gcc/configure.ac | 2 +-
> >> 4 files changed, 17 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc
> >> index 9f746a38808..ecef10190eb 100644
> >> --- a/gcc/cobol/util.cc
> >> +++ b/gcc/cobol/util.cc
> >> @@ -72,6 +72,15 @@ extern int yyparse(void);
> >>
> >> extern int demonstration_administrator(int N);
> >>
> >> +#if !defined (HAVE_GET_CURRENT_DIR_NAME)
> >> +static inline char *
> >> +get_current_dir_name ()
> >> +{
> >> + /* Fall back to getcwd which is also present in libiberty. */
> >> + return getcwd (nullptr, 0);
> >
> > Isn't that getcwd allocates the storage an extension?
>
> Hmm.. indeed Posix:
>
> "The size argument is the size in bytes of the character array pointed to by
> the buf argument. If buf is a null pointer, the behavior of getcwd() is
> unspecified."
>
> and Linux and Darwin differ (Darwin does allocate, Linux does not).
>
> > I see libiberty
> > also does this, but IIRC that copy isn't used if the system provides it?
>
> Maybe we need a libiberty implementation of get_current_dir_name() which does
> the same as the Linux one (and actually the same as the Darwin getcwd).
>
> Open to suggestions ..
char *buf = malloc (PATH_MAX);
return getcwd (buf, PATH_MAX);
?
> Iain
>
> >
> >> +}
> >> +#endif
> >> +
> >> const char *
> >> symbol_type_str( enum symbol_type_t type )
> >> {
> >> diff --git a/gcc/config.in b/gcc/config.in
> >> index 7023209f2ed..0d8a6ba1808 100644
> >> --- a/gcc/config.in
> >> +++ b/gcc/config.in
> >> @@ -1624,6 +1624,12 @@
> >> #endif
> >>
> >>
> >> +/* Define to 1 if you have the `get_current_dir_name' function. */
> >> +#ifndef USED_FOR_TARGET
> >> +#undef HAVE_GET_CURRENT_DIR_NAME
> >> +#endif
> >> +
> >> +
> >> /* Define to 1 if using GNU as. */
> >> #ifndef USED_FOR_TARGET
> >> #undef HAVE_GNU_AS
> >> diff --git a/gcc/configure b/gcc/configure
> >> index 2679a05d9c6..063b9ce6701 100755
> >> --- a/gcc/configure
> >> +++ b/gcc/configure
> >> @@ -10640,7 +10640,7 @@ for ac_func in times clock kill getrlimit
> >> setrlimit atoq \
> >> popen sysconf strsignal getrusage nl_langinfo \
> >> gettimeofday mbstowcs wcswidth mmap posix_fallocate setlocale \
> >> clearerr_unlocked feof_unlocked ferror_unlocked fflush_unlocked
> >> fgetc_unlocked fgets_unlocked fileno_unlocked fprintf_unlocked
> >> fputc_unlocked fputs_unlocked fread_unlocked fwrite_unlocked
> >> getchar_unlocked getc_unlocked putchar_unlocked putc_unlocked madvise
> >> mallinfo mallinfo2 fstatat getauxval \
> >> - clock_gettime munmap msync
> >> + clock_gettime munmap msync get_current_dir_name
> >> do :
> >> as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
> >> ac_fn_cxx_check_func "$LINENO" "$ac_func" "$as_ac_var"
> >> diff --git a/gcc/configure.ac b/gcc/configure.ac
> >> index 78973755f7a..3243472680c 100644
> >> --- a/gcc/configure.ac
> >> +++ b/gcc/configure.ac
> >> @@ -1574,7 +1574,7 @@ AC_CHECK_FUNCS(times clock kill getrlimit setrlimit
> >> atoq \
> >> popen sysconf strsignal getrusage nl_langinfo \
> >> gettimeofday mbstowcs wcswidth mmap posix_fallocate setlocale \
> >> gcc_UNLOCKED_FUNCS madvise mallinfo mallinfo2 fstatat getauxval \
> >> - clock_gettime munmap msync)
> >> + clock_gettime munmap msync get_current_dir_name)
> >>
> >> # At least for glibc, clock_gettime is in librt. But don't pull that
> >> # in if it still doesn't give us the function we want.
> >> --
> >> 2.39.2 (Apple Git-143)
> >>
>