RFR: 8262491: AArch64: CPU description should contain compatible board list [v6]

Andrew Haley aph at openjdk.java.net
Thu Mar 11 10:13:08 UTC 2021


On Wed, 10 Mar 2021 23:49:43 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org> wrote:

>> I think you need this to cope with errors, empty files, and so on:
>> 
>> void VM_Version::get_compatible_board(char *buf, int buflen) {
>>   assert(buf != NULL, "invalid argument");
>>   assert(buflen >= 1, "invalid argument");
>>   *buf = '\0';
>>   int fd = open("/proc/device-tree/compatible", O_RDONLY);
>>   ssize_t read_sz = read(fd, buf, buflen - 1);
>>   if (read_sz >= 0) {
>>     buf[read_sz] = '\0';
>>     // Replace '\0' to ' '                                                                                                                                                                                                                                                                   
>>     for (char *ch = buf; ch < buf + read_sz; ch++) {
>>       if (*ch == '\0') {
>>         *ch = ' ';
>>       }
>>     }
>>   } else { // read() retuned an error                                                                                                                                                                                                                                                        
>>     buf[0] = '\0';
>>   }
>> =>close(fd);
>> }
>
> I updated PR, but it is different from your suggestion a bit. This version would return empty string when `open()` or `read()` returns error, and also `close()` would be called when `open()` succeeded.
> 
> Did you say we can call `read()` and `close()` even if `open()` failed? According to manpage, it seems to work (just return EBADF), but I feel strange a bit. If it is ok, I will do so.

No, if `open()` fails we should return straight away, with an empty string. That needs an addition.
We must, however, terminate the string with 0 at the correct point, at the end of the bytes read. Otherwise ` strlen() `reads uninitialized memory. If the `read()` fails, we must return an empty string.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2759


More information about the hotspot-dev mailing list